import socket


def handle_client(client_socket):
    """处理客户端请求"""

    # 获取请求信息
    client_socket.recv(1024)

    # 组织相应 头信息(header)
    response_headers = "HTTP/1.1 200 OK\r\n"  # 200表示找到这个资源
    response_headers += "\r\n"  # 用一个空的行与body进行隔开
    # 组织 内容(body)
    response_body = "hello world"  # 这里就相当于要返回的body，即浏览器要渲染的内容 用户能看到
    #  response是返回的全部内容
    response = response_headers + response_body
    # 发送数据
    client_socket.send(response.encode("utf-8"))
    # 关闭客户端套接字
    client_socket.close()


def main():
    """作为程序的主控制入口"""
    # 1.创建tcp的套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用  当服务器先close 即服务器端4次挥手之后资源能够立即释放，这样就保证了，下次运行程序时 可以立即绑定7788端口
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # 2.绑定端口
    server_socket.bind(("", 7788))
    # 3.设置监听
    server_socket.listen(128)
    while True:
        # 获取客户端请求
        client_socket, client_addr = server_socket.accept()
        # 处理客户端请求
        handle_client(client_socket)


if __name__ == "__main__":
    main()
